﻿using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text.RegularExpressions;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Xml;

namespace Web.Doc
{
    public partial class xmlhelper : System.Web.UI.Page
    {
        MSL.Utility.Doc.Xml xml = new MSL.Utility.Doc.Xml();
        string path = "D:\\2.xml";
        protected void Page_Load(object sender, EventArgs e)
        {
            string type = "I";
            switch (type)
            {
                case "A":
                    A();
                    break;
                case "B":
                    B();
                    break;
                case "C":
                    C();
                    break;
                case "D":
                    D();
                    break;
                case "E":
                    E();
                    break;
                case "F":
                    F();
                    break;
                case "G":
                    G();
                    break;
                case "H":
                    H();
                    break;
                default: break;
            }
        }
        //CreateXmlDocument
        private void A()
        {
            xml.CreateXmlDocument(@"D:\1.xml", "People", "1.0", "utf-8", "yes");
        }
        //GetHtml
        private void B()
        {
            xml = new MSL.Utility.Doc.Xml(path);
            /// 范例1: @"Skill/First/SkillItem", 等效于 @"//Skill/First/SkillItem"
            /// 范例2: @"Table[USERNAME='a']" , []表示筛选,USERNAME是Table下的一个子节点.
            /// 范例3: @"ApplyPost/Item[@itemName='岗位编号']",@itemName是Item节点的属性.
            xml.GetAttribute("ImgSnapUrl/UrlPath", "title");
        }
        //GetNodeValue
        private void C()
        {
            xml = new MSL.Utility.Doc.Xml(path);
            string value = xml.GetNodeValue("ImgSnapUrl/SnapshotPath");
            value = xml.GetNodeValue("ImgSnapUrl/SnapshotPath");
            value = xml.GetNodeValue("ImgSnapUrl/SnapshotPath/Path[@id=5]");
        }
        //GetSubNodesCount
        private void D()
        {
            xml = new MSL.Utility.Doc.Xml(path);
            int count = xml.GetSubNodesCount("ImgSnapUrl/SnapshotPath");
        }
        //SetNode
        private void E()
        {
            xml = new MSL.Utility.Doc.Xml(path);
            xml.SetNode("ImgSnapUrl/SnapshotPath/Path[@id=5]", @"D:\dataFile\shapshote\55");
            xml.SetNode("ImgSnapUrl/Snapshot", @"2");
            xml.Save();
        }
        //SetAttribute
        protected void F()
        {
            xml = new MSL.Utility.Doc.Xml(path);
            xml.SetAttribute("ImgSnapUrl/SnapshotPath/Path[@id=5]", "title", @"测试");
            xml.SetAttribute("ImgSnapUrl/Snapshot", "name", @"测试");
            xml.Save();
        }
        //AppendNode
        protected void G()
        {
            xml = new MSL.Utility.Doc.Xml(path);
            xml.AppendNode("ImgSnapUrl/SnapshotPath/Path[@id=5]", "Test1", "title", @"测试");
            xml.AppendNode("ImgSnapUrl/Snapshot", "Test2", "title", @"测试2");
            xml.Save();
        }
        //AddAttribute
        protected void H()
        {
            xml = new MSL.Utility.Doc.Xml(path);
            xml.AddAttribute("ImgSnapUrl/SnapshotPath/Path[@id=5]", "people", "马山林");
            xml.Save();
        }

        public void StatisticsWords(string path)
        {
            if (!File.Exists(path))
            {
                Console.WriteLine("文件不存在！");
                return;
            }
            Hashtable ht = new Hashtable(StringComparer.OrdinalIgnoreCase);
            StreamReader sr = new StreamReader(path, System.Text.Encoding.UTF8);
            string line = sr.ReadLine();

            string[] wordArr = null;
            int num = 0;
            while (line.Length > 0)
            {
                //   MatchCollection mc =  Regex.Matches(line, @"\b[a-z]+", RegexOptions.Compiled | RegexOptions.IgnoreCase);
                //foreach (Match m in mc)
                //{
                //    if (ht.ContainsKey(m.Value))
                //    {
                //        num = Convert.ToInt32(ht[m.Value]) + 1;
                //        ht[m.Value] = num;
                //    }
                //    else
                //    {
                //        ht.Add(m.Value, 1);
                //    }
                //}
                //line = sr.ReadLine();

                wordArr = line.Split(' ');
                foreach (string s in wordArr)
                {
                    if (s.Length == 0)
                        continue;
                    //去除标点
                    line = Regex.Replace(line, @"[\p{P}*]", "", RegexOptions.Compiled);
                    //将单词加入哈希表
                    if (ht.ContainsKey(s))
                    {
                        num = Convert.ToInt32(ht[s]) + 1;
                        ht[s] = num;
                    }
                    else
                    {
                        ht.Add(s, 1);
                    }
                }
                line = sr.ReadLine();
            }

            ArrayList keysList = new ArrayList(ht.Keys);
            //对Hashtable中的Keys按字母序排列
            keysList.Sort();
            //按次数进行插入排序【稳定排序】，所以相同次数的单词依旧是字母序
            string tmp = String.Empty;
            int valueTmp = 0;
            for (int i = 1; i < keysList.Count; i++)
            {
                tmp = keysList[i].ToString();
                valueTmp = (int)ht[keysList[i]];//次数
                int j = i;
                while (j > 0 && valueTmp > (int)ht[keysList[j - 1]])
                {
                    keysList[j] = keysList[j - 1];
                    j--;
                }
                keysList[j] = tmp;//j=0
            }
            //打印出来
            foreach (object item in keysList)
            {
                Console.WriteLine((string)item + ":" + (string)ht[item]);
            }
        }
    }
}